﻿import cgi
from google.appengine.ext import db
from google.appengine.ext import webapp
from google.appengine.api import users
from entities import *
from Entities import *
#from entities import DoiTuongNguoiDungEntities
from entities import Entities
#---------------------------
# Entities DoiTuong
#---------------------------
def Get(keyNguoiDung = None, DoiTuongID=0):
    try:
        nguoidung = NguoiDung.get(db.Key(keyNguoiDung)) 
    except:
        return "Invalid Key"
    
    results = DoiTuong.all()
    if keyNguoiDung != None:
        if keyNguoiDung != Entities.GetKey():
            doituongID_list = DoiTuongNguoiDungEntities.GetDoiTuongID(keyNguoiDung)
            results = results.filter("__key__ IN", doituongID_list)    
    if DoiTuongID > 0:
        doituong_list = []
        doituong = DoiTuong.get_by_id(DoiTuongID)
        doituong_dict ={}
        doituong_dict['DoiTuongID'] = doituong.key().id()
        doituong_dict['TenDoiTuong'] = doituong.TenDoiTuong
        doituong_dict['MoTaNgan'] = doituong.MoTaNgan
        doituong_dict['MoTaDai'] = doituong.MoTaDai
        doituong_dict['HoatDong'] = 1
        doituong_list.append(doituong_dict)
    else:
        doituong_list = []
        for doituong in results:
            doituong_dict ={}
            doituong_dict['DoiTuongID'] = doituong.key().id()
            doituong_dict['TenDoiTuong'] = doituong.TenDoiTuong
            doituong_dict['MoTaNgan'] = doituong.MoTaNgan
            doituong_dict['MoTaDai'] = doituong.MoTaDai
            doituong_dict['HoatDong'] = 1
            doituong_list.append(doituong_dict)
    tuple_doituong = tuple(doituong_list)  
    return tuple_doituong
# ham Add của Admin
def Add_Admin(TenDoiTuong, MoTaNgan, MoTaDai):
    doituong = db.GqlQuery("SELECT * FROM DoiTuong WHERE TenDoiTuong = :1",
                              TenDoiTuong)
    if doituong.count() == 0:                      
        doituong = DoiTuong(TenDoiTuong=TenDoiTuong)
        doituong.MoTaNgan = MoTaNgan
        doituong.MoTaDai = MoTaDai
        doituong.put()         
        return "Complete"
    else:
        return "Duplicate"


def GetAll(keyNguoiDung):
    try:
        nguoidung = NguoiDung.get(db.Key(keyNguoiDung)) 
    except:
        return "Invalid Key"
    tuple_doituongNguoidungAll =  DoiTuong_NguoiDung.all().filter("NguoiDung", nguoidung) 
    #tuple_doituongNguoidungAll= Get(keyNguoiDung)
    doituong_nguoidung = []
    doituong_list = []
    for dt in tuple_doituongNguoidungAll:
        doituong_nguoidung.append(dt.DoiTuongID.key().id())
    results = DoiTuong.all()
    for doituong in results:
        doituong_dict = {}
        doituong_dict['DoiTuongID'] = doituong.key().id()
        doituong_dict['TenDoiTuong'] = doituong.TenDoiTuong
        doituong_dict['MoTaNgan'] = doituong.MoTaNgan
        doituong_dict['MoTaDai'] = doituong.MoTaDai        
        if doituong.key().id() in doituong_nguoidung:
            doituong_dict['HoatDong'] = 1
        else:
            doituong_dict['HoatDong'] = 0
        doituong_list.append(doituong_dict)        
    tuple_doituong = tuple(doituong_list)  
    return tuple_doituong        
        
def Add(keyNguoiDung, DoiTuongID):
    try:
        nguoidung = NguoiDung.get(db.Key(keyNguoiDung)) 
    except:
        return "Invalid Key"        
    return DoiTuongNguoiDungEntities.Add(keyNguoiDung, DoiTuongID)
    
def Update(keyNguoiDung, DoiTuongID, TenDoiTuong, MoTaNgan, MoTaDai):
    try:
        nguoidung = NguoiDung.get(db.Key(keyNguoiDung)) 
    except:
        return "Invalid Key"
    doituong_update = DoiTuong.get_by_id(DoiTuongID)
    #doituong = db.GqlQuery("SELECT * FROM DoiTuong WHERE TenDoiTuong = :1 AND NguoiDung = :2",
    #                          TenDoiTuong, nguoidung)
    #if doituong.count() == 0:
    doituong_update.TenDoiTuong = TenDoiTuong
    doituong_update.MoTaNgan = MoTaNgan
    doituong_update.MoTaDai = MoTaDai
    doituong_update.put()
    return "Complete"
    #else:
    #    return "Duplicate"

def Delete(keyNguoiDung, DoiTuongID):
    try:
        nguoidung = NguoiDung.get(db.Key(keyNguoiDung)) 
    except:
        return "Invalid Key"        
    return DoiTuongNguoiDungEntities.Delete(keyNguoiDung, DoiTuongID)
    

def GetByNguoiDung(keyNguoiDung):
    doituong_list = []
    doituongs = DoiTuong_NguoiDung.gql('WHERE NguoiDungID = :1',keyNguoiDung)
    for doituong in doituongs:
        doituong_dict ={}
        doituong_dict['DoiTuongID'] = doituong.key().id()
        doituong_dict['TenDoiTuong'] = doituong.TenDoiTuong
        doituong_dict['MoTaNgan'] = doituong.MoTaNgan
        doituong_dict['MoTaDai'] = doituong.MoTaDai
        doituong_list.append(doituong_dict)
    tuple_doituong = tuple(doituong_list)  
    return tuple_doituong
    
def All():
    doituongs = DoiTuong.all()
    doituong_list = []
    for doituong in doituongs:
        doituong_dict = {}
        doituong_dict['DoiTuongID'] = doituong.key().id()
        doituong_dict['TenDoiTuong'] = doituong.TenDoiTuong
        doituong_dict['MoTaNgan'] = doituong.MoTaNgan
        doituong_dict['MoTaDai'] = doituong.MoTaDai
        doituong_list.append(doituong_dict)
    tuple_doituong = tuple(doituong_list)
    return tuple_doituong
    
    


